#!/usr/bin/node
// 定义 shebang 行，指定使用 node 执行此脚本

// 引入 Node.js 的 events 模块中的 EventEmitter 类
const EventEmitter = require('events').EventEmitter;

// 定义 MusicPlayer 构造函数，用于创建音乐播放器实例
function MusicPlayer(track) {
  this.track = track; // 存储当前播放曲目
  this.playing = false; // 初始状态为未播放
  //添加events键值对属性
  this.events = {
    play: 'play',
    stop: 'stop'
  };

  // 将 EventEmitter 原型上的方法复制到 MusicPlayer 实例上
  for (let methodName in EventEmitter.prototype) {
    // console.log(methodName); // 可以注释掉，用于调试打印方法名
    this[methodName] = EventEmitter.prototype[methodName];
  }
}

// 定义 MusicPlayer 的原型方法
MusicPlayer.prototype = {
  // 重写 toString 方法，用于返回播放器的当前状态
  toString: function () {
    if (this.playing) {
      return "Now Playing:" + this.track; // 如果正在播放，返回正在播放的曲目
    } else {
      return 'Stopped'; // 否则返回已停止
    }
  }
};

// 创建一个新的 MusicPlayer 实例
let musicPlayer = new MusicPlayer('storm');
let e = musicPlayer.events;


// 为 musicPlayer 实例绑定 'play' 事件的监听器
musicPlayer.on(e.play, function () {
  this.playing = true; // 设置播放状态为 true
  console.log('\n', this.toString()); // 打印当前状态
});

// 为 musicPlayer 实例绑定 'stop' 事件的监听器
musicPlayer.on(e.stop, function () {
  this.playing = false; // 设置播放状态为 false
  console.log('\n', this.toString()); // 打印当前状态
});

// 触发 'play' 事件，开始播放音乐
musicPlayer.emit(e.play);

// 两秒后触发 'stop' 事件，停止播放音乐
setTimeout(function () {
  musicPlayer.emit(e.stop);
}, 2000);
